package com.tbit.main.service;

import com.tbit.main.pojo.AccountUser;
import com.tbit.main.pojo.AccountUserBound;
import com.tbit.main.pojo.HolderAccountBound;
import com.tbit.main.pojo.Result;

import java.util.List;
import java.util.Map;

/**
 * 账号
 *
 * @author Leon
 * 2020年2月4日 下午3:27:38
 */
public interface AccountUserService {

    /**
     * 根据手机号码查询
     *
     * @param accountUser
     * @return
     */
    AccountUser getByPhone(AccountUser accountUser);

    /**
     * 根据id查询
     *
     * @param accountUserId
     * @return
     */
    AccountUser getById(Integer accountUserId);

    /**
     * 根据id查询
     *
     * @param accountUserId id
     * @return 账号信息
     */
    AccountUser getAccountUserById(Integer accountUserId);

    /**
     * 根据id查询
     *
     * @param accountUserId
     * @return
     */
    List<AccountUser> getByIds(List<Integer> accountUserId);

    /**
     * 添加
     *
     * @param accountUser
     */
    void insert(AccountUser accountUser);

    /**
     * 绑定角色
     *
     * @param accountUserBound
     */
    void insertBound(AccountUserBound accountUserBound);

    /**
     * 更新
     *
     * @param accountUser
     */
    void update(AccountUser accountUser);

    /**
     * 删除
     *
     * @param accountuserId
     */
    void del(Integer accountuserId);

    /**
     * 添加并绑定
     *
     * @param accountUser
     */
    void addBound(AccountUser accountUser);

    /**
     * 根据账号类型查询
     *
     * @param accountUserBound
     * @return
     */
    List<AccountUser> getByAccountUserType(AccountUserBound accountUserBound);

    /**
     * 根据分区id查询
     *
     * @param regionId
     * @return
     */
    List<AccountUser> getRegionIdsUser(List<Integer> regionId, Integer subRoleType);


    /**
     * 根据分区id查询,也可以根据电话号码和姓名模糊查询
     *
     * @param regionId
     * @return
     */
    List<AccountUser> getRegionIdsUserAndParam(List<Integer> regionId, Integer subRoleType,String param);

    /**
     * 查询用户绑定信息
     *
     * @param accountuserId
     * @return
     */
    AccountUserBound getBoundByUserId(Integer accountuserId);

    /**
     * 股东绑定区域查询
     *
     * @param accountuserId
     * @return
     */
    List<HolderAccountBound> getHolderBoundByUserId(Integer accountuserId);

    /**
     * 根据运营区域和type查询人数
     *
     * @param accountIds
     * @return
     */
    List<Map<String, Object>> getByAccountIdAndType(List<Integer> accountIds, List<Integer> types, String expireDate);

    /**
     * 查询所有
     *
     * @return
     */
    List<AccountUser> getAll();

    /**
     * 查询所有权限
     *
     * @return
     */
    List<AccountUser> getAllAccount();

    /**
     * 过期校验
     *
     * @return
     */
    void expireCheck(Integer accountUserId);

    /**
     * 密码登录
     * @param brandId   品牌id
     * @param phone     手机号
     * @param password  加密后的密码
     * @param loginMethod   0：验证码，1：密码，2：密码+验证码 3：密码/验证码
     * @return  Result<Object>
     */
    Result<Object> loginWithPassword(Integer brandId, String phone, String password, Integer loginMethod, String ip, String userAgent);

    /**
     * 修改密码
     * @param accountUser  当前登录用户
     * @param accountUserId 账户id
     * @param password  加密后密码
     * @return  Result<Object>
     */
    Result<Object> updatePassword(AccountUser accountUser, Integer accountUserId, String password);

}
